计算机病毒(Computer Virus)是一种由恶意编写者在计算机程序中插入的代码。它能够寻找并依附于宿主程序,通过修改其他程序并将自身代码插入其中来实现自我复制。这种恶意代码通常具有传染性、隐蔽性和破坏性,能够影响计算机系统的正常运行。计算机病毒的名称来源于生物病毒,因其类似于生物病毒的感染和传播机制。
发展历史
病毒的学术基础
1984年,Fred Cohen发表论文“Computer Viruses – Theory and Experiments”,这是第一篇明确将可自我复制的程序成为病毒的论文。
1987年,Fred Cohen发表了证明:没有一种算法可以完美地检测所有可能的病毒。科幻小说中的病毒
1970年代中期,大卫·杰洛德(David Gerrold)的《When H.A.R.L.I.E. was One》,描述了一个叫“病毒”的程序和与之对战的叫“抗体”的程序
1975年,约翰·布鲁勒尔(John Brunner)的小说《震荡波骑士(ShakewaveRider)》,描述了一个叫做“磁带蠕虫”、在网络上删除数据的程序。病毒程序的雏形
1960年代初,美国麻省理工学院的一些青年研究人员,在做完工作后,利用业余时间玩一种他们自己创造的计算机游戏。做法是某个人编制一段小程序,然后输入到计算机中运行,并销毁对方的游戏程序。这也可能就是计算机病毒的雏形。
主要特点
破坏性
计算机病毒对系统具有破坏性,这也是其与普通程序最大的区别。它能够破坏计算机数据,甚至造成大范围的计算机瘫痪,对计算机用户造成较大的安全损失。
潜伏性
计算机病毒在侵入计算机时可能并未引起用户注意,在攻击条件具备时再实施破坏,而在这一阶段计算机病毒可能已经进行大量的 传染并做了实施攻击的准备,比如如1999年破坏№BIOS的CIH病毒就在每年的4月26日爆发。与生物病毒类似,在计算机病毒爆发前,就以最大幅度传播。
传染性
计算机病毒在执行中或在传播中借助一些机制复制自身到其他 系统或载体中,比如感染中毒用户计算机上的可执行文件,如exe、bat、scr、com格式,通过这种方法达到自我复制,对自己生存保护的目的。依附性
计算机病毒往往依附于系统中的某个程序、数据文件或磁盘扇区,在它们被应用时才会被执行。
基本原理
计算机病毒的生命周期主要包括编制代码、传播、感染、触发、运行等环节[9]
计算机病毒的基本原理主要是指计算机病毒传播、感染和触发的机制。传播机制
传播机制是指计算机病毒散布和侵入受害系统的方法,它包括计算机病毒自我复制和传播的情况,也包括恶意代码被复制和被传播 的情况等。文件流动
文件流动的主要途径是移动介质和网络下载,病毒可能在文件流动中得到传播。网页脚本和插件
动态网页技术支持在网页中运行脚本和插件,它们需要在客户端运行,如Windows平台下支持VBScript、JavaScript脚本以及 AxtiveX控件等。一方面,在浏览器访问需要运行脚本的网页时,网页脚本立即被执行,这可能使系统直接感染恶意代码。另一方面,客户端浏览网页过程中,如果被网页内容欺骗并信任网页插件来源时,可能会选择主动安装相应插件,在这一过程中,可能会使得系统遭受感染。 电子邮件
电子邮件支持附件传输功能,它经常被利用于传播计算机病毒,当用户误认为邮件来源可靠时,通常会执行或保存这些附件,使系统受到感染。数字内容播放
一些视频和音频播放器支持显示网页或弹出窗口显示它们,播放器缺乏浏览器那样的安全检查,更容易遭受通过网页实施的计算机病毒的攻击。感染机制
恶意代码依附于宿主或隐藏于系统中的方法,实施它的前提是计算机病毒已经进入受害系统。按照不同的感染对象,感染机制可以分为:感染引导系统、感染执行文件、感染结构化文档、感染网络服务和客户端等。
以感染结构化文档为例,Word、Excel、Access、Visio、PowerPoint、WordPro等结构化文 档以及相关的模版文件包含宏以实现一些自动的文档处理。制作病毒的人员利用WordBasic编程接口制作的具有病毒性质的宏集合。在打开一个带宏病毒的文档或模板时,激活了病毒宏,病毒宏还将自身复制到相关文档或模板中。由于WordBasic语言提供了许多系统底层调用,因此宏病毒可能对系统直接构成威胁。触发机制
对已经侵入或感染到受害系统中的计算机病毒,使它们得到执行的方法、条件或途径。一方面,计算机病毒的触发机制往往取决于感染机制:比如当程序、组件和宏命令等被执行时,其中感染的计算机病毒将获得执行权。另一方面,为了加强计算机病毒的隐蔽性,一些计算机病毒需要参照时钟、时间、计数次数等因素决定是否开始执行。
计算机病毒的分类
在计算机病毒的研究中,分类的目的是为了更好地描述、分析和理解计算机病毒的特性、危害及其成因,以便制定有效的防护和治疗措施。
1.根据病毒破坏的能力分类
无危害型:这些病毒不会对系统造成破坏,只是减少磁盘空间或外部资源,例如 Elk Cloner 病毒。
无危险型:病毒仅会减少内存,显示图像或声音警报,例如鬼病毒。
危险型:这些病毒会导致计算机系统操作中产生严重错误,例如 Hebrew 病毒。
非常危险型:这类病毒会删除程序、数据或清除系统内的关键信息,例如 CIH 病毒。
2.按照计算机病毒的破坏情况分类
3.按照计算机病毒攻击的操作系统分类
4.按照计算机病毒攻击的机型分类
计算机病毒的命名规则
计算机病毒的命名规则包含了一些通用原则和国际惯例。这些命名规则有助于建立病毒的分类学体系,是反病毒技术的重要组成部分。
1. 通用命名规则
1.1 根据病毒出现的时间命名
有些病毒根据其出现或破坏系统的时间进行命名,通常与特定事件或日期相关。例如,13号星期五病毒(Friday the 13th)因在某个星期五的13号激活而得名。另一个例子是米开朗基罗病毒(Michaelangelo),因在3月6日(米开朗基罗的生日)发作而得名。
1.2 根据病毒表现的症状命名
有些病毒根据其感染系统后的表现症状命名。例如,乒乓病毒(Ping Pong,或称为“跳动的小球”病毒)是因其感染电脑后屏幕上显示类似弹跳小球的效果而得名。又如烟花病毒(Firework),是因为在感染的显示器上展示出类似烟花的视觉效果。
1.3 根据传播方式命名
病毒的命名有时也会依据其传播方式。例如,13号星期五病毒会感染多个**.EXE**文件,导致文件进一步破坏和系统崩溃。
1.4 根据病毒自我声明或嵌入标识符命名
某些病毒在其代码中嵌入了名字或通过显示的消息表明其名称。例如,大麻病毒(Marijuana)因为其代码中包含“Marijuana”字样而得名。其他例子包括磁盘杀手病毒(DiskKiller),激活时会显示相关信息,以及食人魔病毒(Ogre),因其代码中的标识符得名。
1.5 根据地理来源命名
有些病毒以其最早发现的地理位置命名。例如,13号星期五病毒最早在耶路撒冷被发现,因此也称为耶路撒冷病毒(Jerusalem)。类似地,维也纳病毒(Vienna)则是因为最早在维也纳发现而命名。
1.6 根据代码长度命名
一些病毒是根据其代码长度命名的。例如,13号星期五病毒也被称为1813病毒,因为其代码长度为1813字节。同样地,幽灵病毒(Ghost)也被称为3544病毒,因为其代码长度为3544字节。
2. 国际病毒命名惯例
在国际上,病毒的命名通常由前缀和后缀组成,如“家族名+病毒标识符”。前缀通常表示病毒家族或目标操作系统(如DOS),后缀则提供了病毒变种的具体信息。
例如,WM.Cap.A.A病毒的命名结构如下:
病毒名称中也可能包含代码,指示其功能。例如,Trojan.LMir.PSW.60病毒通常是一种带有窃取密码功能的木马病毒。
计算机病毒的传播途径
1. 通过存储介质传播
存储介质指的是用于保存和传输数据的设备,如软盘、U盘、CD、移动硬盘等。早期,计算机病毒主要依赖这些介质传播,尤其是在没有网络连接的情况下,存储介质成为病毒跨设备传播的首选渠道。
2. 通过游戏软件传播
游戏软件,尤其是非法下载或破解的游戏程序,常常成为计算机病毒的载体之一。这类传播方式非常隐蔽,因为许多用户在安装或运行游戏时,很少注意到其中可能夹带的恶意代码。
病毒通常隐藏在破解程序或安装文件中,用户在安装游戏时,病毒也随之进入计算机。病毒可能通过篡改系统文件、劫持游戏数据或盗取用户敏感信息来实现攻击。比如在一些破解游戏常常包含恶意软件或木马程序中,这些病毒可以记录用户的游戏账号、密码,甚至植入后门程序,远程控制用户的电脑。
3. 通过网络传播
随着互联网的普及,网络已成为计算机病毒最主要的传播途径。网络传播病毒的速度极快,影响范围广泛,常见的传播方式包括电子邮件、即时通讯软件、网站、文件下载等。
其中在网络传播中,病毒传播模型又细分为SIS 和 SIR模型。SIS模型(易感-感染-易感):在这个模型中,个体被感染后有可能恢复为易感状态,即再次受到感染。研究发现,在标度无关网络中,病毒能够在少数枢纽节点的不断感染与恢复之间维持稳定的传播状态。其中“标度无关网络”是一类特殊的复杂网络结构,它的特点是部分节点(称为“枢纽”)拥有极高的连接度,而大多数节点的连接较少。这种网络中,节点与其他节点相连的概率遵循幂律分布,也就是说,少数节点拥有大量连接,而多数节点仅与少数其他节点相连。SIR模型(易感-感染-恢复):相比之下,SIR模型中,个体感染后恢复为免疫状态,不再易感。这种模型更符合现实中的许多计算机病毒情况,例如使用杀毒软件后恢复的电脑不再受到同类病毒的感染。
4. 通过计算机硬件传播
虽然这种传播方式较为少见,但计算机病毒也可以通过某些硬件设备传播,例如嵌入式芯片、外设控制器等。这类病毒的传播途径依赖于硬件的操作和使用,常常出现在较为复杂的攻击场景中。
计算机病毒的破坏机制
1. 蓄意破坏
计算机病毒的蓄意破坏取决于病毒编写者的意图和其技术水平。这类破坏主要表现为对计算机存储数据的直接损害。引导型病毒会覆盖硬盘引导区,导致原有的引导区数据永久丢失,系统无法恢复。其他病毒可能在感染后格式化硬盘,删除文件或篡改重要数据。
2. 偶然性破坏
病毒编写中的错误或疏忽可能导致偶然性破坏,甚至超出病毒编写者的初衷。病毒错误可能导致系统崩溃、重要数据丢失或不可预测的系统故障。此外,病毒的兼容性差异可能使其在不同系统环境中表现出不同的破坏性。
3. 附带性破坏
病毒在感染过程中会利用计算机的资源,造成性能下降或其他间接影响。病毒占用磁盘空间、网络带宽,甚至可能导致系统运行速度显著降低。病毒还会增加硬件的负荷,损害计算机的正常运行。
4. 心理及社会性破坏
病毒的社会性破坏不仅限于技术层面,还包括心理层面的恐慌和社会影响。病毒可能导致商业机密泄露,财务数据被窃取,严重损害企业声誉。发现病毒感染会引起恐慌,进而影响计算机的使用效率,甚至带来不可估量的社会后果。
计算机病毒的隐藏方式
计算机病毒的隐蔽性,是其能够持续危害系统的关键。在病毒的发展历程中,隐藏技术逐渐演变,形成了多种隐蔽形式,极大地增加了病毒的检测难度。而计算机病毒的隐藏技术经历了从简单的窗口与进程隐藏、文件隐藏,逐渐发展到线程注射、钩子技术,以及后来的Rootkit等高级手段。
1. 病毒的隐蔽性特征
病毒在感染计算机后,为了避免被用户和反病毒软件检测到,通常采用各种技术来隐藏自身。隐蔽性是病毒赖以存活的核心特性,因为病毒的破坏行为往往是在其未被发现的前提下进行的。
2. 早期的隐藏技术
在计算机病毒与木马后门刚开始流行的早期(Windows 95/98时代),计算机用户普遍缺乏安全意识。病毒编写者并不需要复杂的技术便能隐藏病毒,使其在系统中悄无声息地运行。
2.1 隐藏窗口与进程
在Windows系统中,所有运行的程序都拥有至少一个“窗口”,用户可以通过这个窗口与程序交互。早期病毒常常通过将程序窗口设置为“不可见”来隐藏其运行状态,从而让用户无法察觉。
此外,病毒编写者利用未公开的API函数RegisterServiceProcess,将病毒注册为“服务进程”。由于Windows 9x的任务管理器不会显示此类进程,这让病毒在用户的系统中能够悄然存在。
2.2 隐藏文件
早期的木马后门程序通常采用简单的文件隐藏方式,即将文件属性设置为“隐藏”。由于Windows系统默认不显示隐藏文件,许多用户对这些隐藏文件毫无察觉,病毒因此得以长期潜伏在系统中。
3. 线程注射技术的兴起
随着计算机技术的发展,病毒编写者开始采用更加高级的隐藏手段,其中线程注射技术成为了木马病毒的重要隐藏手段。
3.1 线程与进程的区别
在了解线程注射之前,首先需要理解进程与线程的概念。进程是指一个程序在运行时占用的内存空间。一个进程可以产生多个线程,每个线程执行进程中的一部分代码,多线程技术使得程序可以同时执行多个任务,从而提高运行效率。
3.2 远程线程注射
远程线程注射(Remote Thread Injection)技术允许一个进程将代码注入到另一个进程的内存空间中。注入的线程成为目标进程的一部分,从而实现病毒代码的隐藏执行。此技术通过跨进程内存空间的访问,实现了木马的隐蔽操作。
4. 钩子技术(Hook)的应用
钩子(Hook)是一种消息截获机制,允许程序监视特定窗口的消息。当消息到达目标窗口之前,钩子函数先行处理。病毒编写者利用钩子技术,可以在用户毫无察觉的情况下截获输入输出信息,如键盘输入和屏幕内容等,从而实现窃取数据等恶意行为。
5. 隐藏技术的进化
随着Windows NT体系的普及,许多早期的隐藏技术失效,病毒编写者不断探索新的隐藏手段,如内核级隐藏和Rootkit技术等。现代病毒更加复杂,其隐藏方式不仅包括线程注射,还结合了系统层面的深度隐藏手段,使得传统的杀毒软件更加难以检测。
Rootkit是一类高级的隐藏工具,通过修改操作系统核心模块(如内核),使病毒能够避开系统安全机制的监控。Rootkit可以将病毒进程、文件、注册表项等隐藏起来,使其在用户和反病毒软件面前“消失”。
计算机病毒的清除与预防
1.计算机病毒的清除
计算机病毒的清除尽量在保全被感染程序功能的情况下移除计算机病毒或使其失效。
手工清除:对引导型计算机病毒,清除存在于主引导记录或分区引导记录中的计算机病毒,并根据原引导代码恢复引导程序,但为了抵御计算机病毒对原引导代码的覆盖,一般需要预先备份它们。常驻内存的一些计算机病毒可能受到操作系统的保护,一般要求用干净的启动盘启动后再实施检测和清除。
软件工具清除:早期较为著名的杀毒软件有江民杀毒、目前国内的计算机杀毒软件有电脑管家、360 等。国外杀毒软件比较著名的有卡巴斯基等。另外一方面,由于计算系统的不断完善,系统的稳定性和抗干扰性不断增强,一般的计算机病毒很难以穿过当前计算机系统所建立的防火墙。
2. 计算机病毒的预防
从开发者的角度出发: 对于计算机病毒要实现定时检测和在线检测,其中,在线检测指一旦有文件被打开就实施检测;在线监控程序行为;备份和恢复重要数据, 例如主引导代码和中断向量表等;保护重要文件;隔离可疑文件; 制定安全防范策略;在线更新恶意代码特征。
对于网络用户而言,培养良好的上网习惯,培养自觉的信息安全意识,例如:对不明邮件及附件慎重打开;尽可能使用较为复杂的密码;不要执行从网络下载后未经杀毒处理的软件等;不要随便浏览或登录陌生的网站,加强个人保护;
参考资料
.Essays on Cellular Automata.